|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**) ОТДЕЛ Закладки;
(*============================================================================*
* НАЗНАЧЕНИЕ: закладки на холсты в главном окне
*============================================================================*)
ИСПОЛЬЗУЕТ
Рамка,
Надел,
Поле,
Холст,
ОС ИЗ "..\Обмен\",
ЦвЗнак ИЗ "..\Обмен\",
Окно ИЗ "..\Обмен\",
Файл ИЗ "..\Обмен\",
Ввод ИЗ "..\Обмен\";
ПОСТ
Закладок = 30; (* всего может быть закладок *)
(* цвет *)
цРамка = 1BX;
цОткрытая = 1FX;
цЗакрытая = 17X;
цРКнопка = 1FX;
цНКнопка = 17X;
ВИД
Доступ-=ДОСТУП К Вид;
Вид-=НАБОР(Надел.Вид)
закладок:ЦЕЛ; (* используется закладок *)
открытая:ЦЕЛ; (* номер открытой закладки *)
первая:ЦЕЛ; (* первая видимая закладка *)
холст-:Холст.Доступ; (* открытый холст *)
холсты:РЯД Закладок ИЗ Холст.Доступ;
естьПраваяКнопка,естьЛеваяКнопка:КЛЮЧ;
былаОшибка:КЛЮЧ; (* в нижней строке отображается сообщение об ошибке *)
КОН;
ПЕР
(* составные постоянные *)
пОткрытыйПробел:ЦвЗнак.Вид;
пЗакрытыйПробел:ЦвЗнак.Вид;
пВертЧерта :ЦвЗнак.Вид;
пГорЧерта :ЦвЗнак.Вид;
пПНУгол :ЦвЗнак.Вид;
пЛНУгол :ЦвЗнак.Вид;
пНУглы :ЦвЗнак.Вид;
пЧерта :ЦвЗнак.Строка;
(******************************************************************************)
ЗАДАЧА ПодготовитьПостоянные;
ПЕР
поз:ЦЕЛ;
УКАЗ
ЦвЗнак.ИзЗнакаИЦвета(" ",цЗакрытая,пЗакрытыйПробел);
ЦвЗнак.ИзЗнакаИЦвета(" ",цОткрытая,пОткрытыйПробел);
ЦвЗнак.ИзЗнакаИЦвета(2502X,цРамка,пВертЧерта);
ЦвЗнак.ИзЗнакаИЦвета(2500X,цРамка,пГорЧерта);
ЦвЗнак.ИзЗнакаИЦвета(2518X,цРамка,пПНУгол);
ЦвЗнак.ИзЗнакаИЦвета(2514X,цРамка,пЛНУгол);
ЦвЗнак.ИзЗнакаИЦвета(2534X,цРамка,пНУглы);
ОТ поз:=0 ДО РАЗМЕР(пЧерта)-1 ВЫП
пЧерта[поз]:=пГорЧерта
КОН
КОН ПодготовитьПостоянные;
(******************************************************************************)
ЗАДАЧА ОтрисовкаЗаголовка(закладки:Доступ);
ПЕР
верх,низ:ЦвЗнак.Строка; (* для ускорения вывода *)
знак,цвет:ЗНАК;
поз:ЦЕЛ;
закладка:ЦЕЛ;
послк:ЦЕЛ; (* последняя колонка *)
к:ЦЕЛ; (* обрабатываемая колонка (0..послк) *)
лк,пк,вс,нс:ЦЕЛ;
УКАЗ
лк:=закладки.лк;
пк:=закладки.пк;
вс:=закладки.вс;
нс:=вс+1;
послк:=пк-лк-2;
низ:=пЧерта;
(* место под кнопки *)
верх[0]:=пВертЧерта;
низ[0]:=пНУглы;
верх[послк]:=пВертЧерта;
низ[послк]:=пНУглы;
(* существование кнопок *)
закладки.естьЛеваяКнопка:=ОТКЛ;
закладки.естьПраваяКнопка:=ОТКЛ;
ЕСЛИ закладки.первая > 0 ТО
закладки.естьЛеваяКнопка:=ВКЛ
КОН;
(* для всех видимых закладок *)
к:=0;
закладка:=закладки.первая;
КОЛЬЦО
ЕСЛИ (закладка >= закладки.закладок) ИЛИ (к >= послк) ТО
ВЫХОД
КОН;
(* передний разделитель *)
верх[к]:=пВертЧерта;
ЕСЛИ закладка = закладки.открытая ТО
низ[к]:=пПНУгол
ИНАЧЕ
ЕСЛИ закладка-1 = закладки.открытая ТО
низ[к]:=пЛНУгол
ИНАЧЕ
низ[к]:=пНУглы
КОН
КОН;
УВЕЛИЧИТЬ(к);
(* текст *)
поз:=0;
КОЛЬЦО
ЕСЛИ поз >= ДЛИНА(закладки.холсты[закладка].имя) ТО
ВЫХОД
КОН;
ЕСЛИ к >= послк ТО
закладки.естьПраваяКнопка:=ВКЛ;
ВЫХОД
КОН;
знак:=закладки.холсты[закладка].имя[поз];
ЕСЛИ закладка = закладки.открытая ТО
ЦвЗнак.ИзЗнакаИЦвета(знак,цОткрытая,верх[к]);
низ[к]:=пОткрытыйПробел
ИНАЧЕ
ЦвЗнак.ИзЗнакаИЦвета(знак,цЗакрытая,верх[к])
КОН;
УВЕЛИЧИТЬ(к);
УВЕЛИЧИТЬ(поз)
КОН;
УВЕЛИЧИТЬ(закладка)
КОН;
(* задний разделитель *)
верх[к]:=пВертЧерта;
ЕСЛИ закладка-1 = закладки.открытая ТО
низ[к]:=пЛНУгол
ИНАЧЕ
низ[к]:=пНУглы
КОН;
УВЕЛИЧИТЬ(к);
(* свободное место *)
ПОКА к < послк ВЫП
верх[к]:=пЗакрытыйПробел;
УВЕЛИЧИТЬ(к)
КОН;
(* кнопки *)
ЕСЛИ закладки.естьЛеваяКнопка ТО
цвет:=цРКнопка
ИНАЧЕ
цвет:=цНКнопка
КОН;
Окно.ПисатьЦвет(вс,лк,цвет);
Окно.ПисатьЗнак(вс,лк,25C4X);
Окно.ПисатьЦвет(нс,лк,цРамка);
Окно.ПисатьЗнак(нс,лк,2500X);
ЕСЛИ закладки.естьПраваяКнопка ТО
цвет:=цРКнопка
ИНАЧЕ
цвет:=цНКнопка
КОН;
Окно.ПисатьЦвет(вс,пк,цвет);
Окно.ПисатьЗнак(вс,пк,25BAX);
Окно.ПисатьЦвет(нс,пк,цРамка);
Окно.ПисатьЗнак(нс,пк,2500X);
(* вывод *)
Окно.ПисатьСтроку(верх,вс,лк+1,послк+1);
Окно.ПисатьСтроку(низ,нс,лк+1,послк+1)
КОН ОтрисовкаЗаголовка;
(******************************************************************************)
ЗАДАЧА ОтрисовкаОткрытой(закладки:Доступ);
ПЕР
отрисовка:Поле.Отрисовка;
холст:Холст.Доступ;
УКАЗ
ЕСЛИ закладки.закладок = 0 ТО
Окно.РазмерУказки(0);
закладки.холст:=ПУСТО;
Окно.ЦветнойПробел(закладки.вс+2,закладки.лк,закладки.нс,закладки.пк,Надел.цХолста)
ИНАЧЕ
холст:=закладки.холсты[закладки.открытая];
Рамка.Выставить(холст,закладки.поле);
холст.Приём(холст,отрисовка);
закладки.холст:=холст
КОН
КОН ОтрисовкаОткрытой;
(******************************************************************************)
ЗАДАЧА ВыровнятьПервую(закладки:Доступ);
ПЕР
длина:ЦЕЛ;
первая:ЦЕЛ;
УКАЗ
ЕСЛИ закладки.закладок = 0 ТО ВОЗВРАТ КОН;
ЕСЛИ закладки.первая > закладки.открытая ТО
закладки.первая:=закладки.открытая
ИНАЧЕ
длина:=закладки.пк-закладки.лк-4;
первая:=закладки.открытая;
ПОКА длина > 0 ВЫП
ЕСЛИ первая = закладки.первая ТО ВОЗВРАТ КОН;
УМЕНЬШИТЬ(длина,ДЛИНА(закладки.холсты[первая].имя)+1);
УМЕНЬШИТЬ(первая)
КОН;
закладки.первая:=первая+1
КОН
КОН ВыровнятьПервую;
(******************************************************************************)
ЗАДАЧА НажатаМышка(закладки:Доступ; км:ЦЕЛ);
ПЕР
к,пк,закладка:ЦЕЛ;
УКАЗ
пк:=закладки.пк-закладки.лк;
ЕСЛИ км <= 1 ТО
ЕСЛИ закладки.естьЛеваяКнопка ТО
УМЕНЬШИТЬ(закладки.первая)
КОН
АЕСЛИ км >= пк-1 ТО
ЕСЛИ закладки.естьПраваяКнопка ТО
УВЕЛИЧИТЬ(закладки.первая)
КОН
ИНАЧЕ
закладка:=закладки.первая;
к:=1;
КОЛЬЦО
ЕСЛИ (закладка >= закладки.закладок) ИЛИ (к >= пк-1) ТО
ВЫХОД
КОН;
УВЕЛИЧИТЬ(к,ДЛИНА(закладки.холсты[закладка].имя)+1);
ЕСЛИ км <= к ТО
закладки.открытая:=закладка;
ОтрисовкаОткрытой(закладки);
ВЫХОД
КОН;
УВЕЛИЧИТЬ(закладка)
КОН
КОН;
ОтрисовкаЗаголовка(закладки)
КОН НажатаМышка;
(******************************************************************************)
ЗАДАЧА Приём(надел:Надел.Доступ; посылка+:Ввод.Посылка);
ПЕР
закладки:Доступ;
ЗАДАЧА ПриёмУХолста;
ПЕР
холст:Холст.Доступ;
УКАЗ
холст:=закладки.холст;
ЕСЛИ холст # ПУСТО ТО
холст.Приём(холст,посылка)
КОН
КОН ПриёмУХолста;
УКАЗ
закладки:=надел(Доступ);
ЕСЛИ закладки.былаОшибка ТО
ОтрисовкаОткрытой(закладки);
закладки.былаОшибка:=ОТКЛ
КОН;
ДЛЯ посылка ВИДА
| Поле.Отрисовка:
ОтрисовкаЗаголовка(закладки);
ОтрисовкаОткрытой(закладки)
| Ввод.ОтМышки:
ЕСЛИ посылка.с < 2 ТО
ЕСЛИ посылка.события = {} ТО
НажатаМышка(закладки,посылка.к)
КОН
ИНАЧЕ
УМЕНЬШИТЬ(посылка.с,2);
ПриёмУХолста
КОН
ИНАЧЕ
ПриёмУХолста
КОН
КОН Приём;
(******************************************************************************)
ЗАДАЧА Открыть-(закладки:Доступ; оИмяФ-:Файл.ВПолного);
(* открывает закладку на холст с заданным именем файла *)
ПЕР
имяФ:Файл.ВПолного;
холст:Холст.Доступ;
закладка:ЦЕЛ;
УКАЗ
ОС.МестоФ(оИмяФ,имяФ);
(* может закладка с таким именем файла уже существует *)
ОТ закладка:=0 ДО закладки.закладок-1 ВЫП
ЕСЛИ закладки.холсты[закладка].имяФ = имяФ ТО
закладки.открытая:=закладка;
ОтрисовкаЗаголовка(закладки);
ОтрисовкаОткрытой(закладки);
ВОЗВРАТ
КОН
КОН;
(* создаём новую закладку *)
ЕСЛИ закладки.закладок >= Закладок ТО ВОЗВРАТ КОН;
холст:=Холст.СоздатьИзФайла(2,0,-1,0,имяФ);
(* сажаем холст на наше поле *)
холст.поле:=закладки.поле;
холст.состояние:=Надел.сВыбран;
(* добавляем холст в закладки *)
закладки.холсты[закладки.закладок]:=холст;
закладки.открытая:=закладки.закладок;
УВЕЛИЧИТЬ(закладки.закладок);
ОтрисовкаОткрытой(закладки);
ВыровнятьПервую(закладки);
ОтрисовкаЗаголовка(закладки)
КОН Открыть;
(******************************************************************************)
ЗАДАЧА Удалить-(закладки:Доступ);
(* удаляет открытую закладку *)
ПЕР
закладка,открытая:ЦЕЛ;
УКАЗ
ЕСЛИ закладки.закладок = 0 ТО ВОЗВРАТ КОН;
УМЕНЬШИТЬ(закладки.закладок);
открытая:=закладки.открытая;
ОТ закладка:=открытая ДО закладки.закладок-1 ВЫП
закладки.холсты[закладка]:=закладки.холсты[закладка+1]
КОН;
ЕСЛИ открытая = закладки.закладок ТО
УМЕНЬШИТЬ(закладки.открытая)
КОН;
ОтрисовкаОткрытой(закладки);
ВыровнятьПервую(закладки);
ОтрисовкаЗаголовка(закладки)
КОН Удалить;
(******************************************************************************)
ЗАДАЧА Следующая-(закладки:Доступ);
(* выбор следующей закладки *)
УКАЗ
ЕСЛИ закладки.закладок = 0 ТО ВОЗВРАТ КОН;
УВЕЛИЧИТЬ(закладки.открытая);
ЕСЛИ закладки.открытая >= закладки.закладок ТО
закладки.открытая:=0
КОН;
ВыровнятьПервую(закладки);
ОтрисовкаЗаголовка(закладки);
ОтрисовкаОткрытой(закладки)
КОН Следующая;
(******************************************************************************)
ЗАДАЧА СИзменениями-(закладки:Доступ):КЛЮЧ;
(* Есть изменённые холсты? *)
ПЕР
закладка:ЦЕЛ;
УКАЗ
ОТ закладка:=0 ДО закладки.закладок-1 ВЫП
ЕСЛИ закладки.холсты[закладка].изменён = "*" ТО
ВОЗВРАТ ВКЛ
КОН
КОН;
ВОЗВРАТ ОТКЛ
КОН СИзменениями;
(******************************************************************************)
ЗАДАЧА СохранитьИзменённые-(закладки:Доступ);
ПЕР
закладка:ЦЕЛ;
холст:Холст.Доступ;
УКАЗ
ОТ закладка:=0 ДО закладки.закладок-1 ВЫП
холст:=закладки.холсты[закладка];
ЕСЛИ холст.изменён = "*" ТО
ЕСЛИ Холст.СохранитьВФайл(холст) ТО КОН
КОН
КОН
КОН СохранитьИзменённые;
(******************************************************************************)
ЗАДАЧА Создать-(верх,лево,строк,колонок:ЦЕЛ):Доступ;
ПЕР
закладки:Доступ;
УКАЗ
СОЗДАТЬ(закладки);
Надел.Подготовить(закладки,верх,лево,строк,колонок,{Надел.прВыбираемый},Приём);
ВОЗВРАТ закладки
КОН Создать;
(******************************************************************************)
ЗАДАЧА ВыводОшибки-(закладки:Доступ; имяФ-:Файл.ВПолного; с,к:ЦЕЛ; текст-:ЦЕПЬ);
ПЕР
нс,лк,пк:ЦЕЛ;
УКАЗ
Открыть(закладки,имяФ);
ЕСЛИ закладки.закладок = 0 ТО ВОЗВРАТ КОН;
Холст.ВыставитьУказку(закладки.холст,с-1,к-1);
нс:=закладки.нс;
лк:=закладки.лк;
пк:=закладки.пк;
Окно.ЦветнойПробел(нс,лк,нс,пк,Надел.цПредупреждения);
Окно.Цепь(нс,лк,нс,пк,текст);
закладки.былаОшибка:=ВКЛ
КОН ВыводОшибки;
(******************************************************************************)
УКАЗ
ПодготовитьПостоянные
КОН Закладки.
|
|